package com.bdqn.spark.chapter05.accumulator

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark01_accumulator {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("accumulator")
    val sc = new SparkContext(sparkConf)

    val rdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4))

    // 第一种方法：可以正常实现效果
    // 把所有分区内数据累加，然后分区间数据累加
//     val result: Int = rdd.reduce(_ + _)
//     println(result)

    // 第二种方法：不可以实现效果
    var result: Int = 0;
    rdd.foreach {
      num => {
        result += num
      }
    }
    // 原因在于，result数据会传到Executor端，但是不会返回
    // print打印的数据是Driver端的数据，一直没有改变，所以是0
    print(result)

    sc.stop()
  }
}
